# frozen_string_literal: true
require 'sketchup'
require 'extensions'
require 'net/http'
require 'json'
require 'tempfile'
$LOAD_PATH << File.expand_path('.', File.dirname(__FILE__))
$LOAD_PATH << File.expand_path('lib\ext\zip', File.dirname(__FILE__))


module DengHaiLightTools
  ICON_PATH = File.expand_path('assets/icon/', File.dirname(__FILE__)) unless defined? ICON_PATH # 图标文件夹路径
  HTML_PATH = File.expand_path('html/', File.dirname(__FILE__)) unless defined? HTML_PATH # HTML 文件夹路径
  LIGHT_PATH_CONFIG = File.join(File.dirname(__FILE__), 'light_path.config') unless defined? LIGHT_PATH_CONFIG # 配置文件地址
  LOG_FILE_PATH = File.expand_path("log/#{Time.now.strftime('%Y-%m-%d')}.log", __dir__) unless defined? LOG_FILE_PATH # 日志文件,每天创建一个。
  UPDATE_URL = URI.parse('https://gitee.com/akiWang/LightToolsForSketchup/releases/latest') unless defined? UPDATE_URL # 更新检查地址
  LOCAL_VERSION_PATH = File.expand_path('./version.json', File.dirname(__FILE__)) unless defined? LOCAL_VERSION_PATH # 本地版本文件
  BLOCK_FILE = File.expand_path('./update.block', File.dirname(__FILE__)) unless defined? BLOCK_FILE # 阻止更新检查文件

  require 'lib\helpers\helpers'
  require 'lib\helpers\tools_edit_mode'
  require 'lib\helpers\tools_put_light'
  require 'lib\helpers\tools_copy_light'
  require 'lib\modules\put_lights\put_lights'
  require 'lib\modules\edit_mode\edit_mode'
  require 'lib\modules\edit_attr\edit_attr'
  require 'lib\modules\fixture_light\fixture_light'
  require 'lib\modules\mvr_file\mvr_file'
  require 'lib\modules\copy_light\copy_light'
  require 'lib\ext\zip\zip'

  # load File.expand_path('lib\helpers\helpers.rb', File.dirname(__FILE__))

  LOGGER = LazyLogger.new(LOG_FILE_PATH) unless defined? LOGGER # 记录器， 这个必须放在这里，因为类定义在helper中
  # LOGGER.level = Logger::INFO # 设置记录日志的等级

  # 统一日志样式
  def self.logger_text(error_line, error_message)
    "#{error_line} >> #{error_message}"
  end

  # 获取灯库路径
  def self.read_light_path_from_file(file_path)
    if File.exist?(file_path)
      temp_light_path = File.read(file_path).strip
      return temp_light_path if Dir.exist?(temp_light_path)
    end
    nil
  end

  # 保存灯库路径到文件
  def self.save_light_path_to_file(file_path, selected_directory)
    File.open(file_path, 'w') do |file|
      file.puts selected_directory
    end
  end

  # 设置灯库路径，如果取消，则保存到默认位置
  def self.main_set_light_path
    selected_directory = UI.select_directory(title: '指定灯具保存目录')
    if selected_directory
      save_light_path_to_file(LIGHT_PATH_CONFIG, selected_directory)
      selected_directory
    else
      default_light_path = File.expand_path('assets/light_library/', File.dirname(__FILE__))
      save_light_path_to_file(LIGHT_PATH_CONFIG, default_light_path)
      default_light_path unless defined? LIGHT_PATH
    end
  end

  # 检测是否有灯库配置保存文件，如果没有，则认为是首次登录。
  if File.exist?(LIGHT_PATH_CONFIG)
    temp_light_path = read_light_path_from_file(LIGHT_PATH_CONFIG)
    if temp_light_path
      LIGHT_PATH = temp_light_path unless defined? LIGHT_PATH
    else
      UI.messagebox('检测到灯具保存目录已不存在。请重新指定灯具保存目录。')
      LIGHT_PATH = main_set_light_path
    end
  else
    UI.messagebox("首次运行，请配置灯具保存目录。\n后续要修改该目录，请在插件目录下找到deng_hai_light_tools子目录中的light_path.config，修改其中的内容为新的灯具保存目录。\n如未配置，灯具将保存在默认位置。")
    LIGHT_PATH = main_set_light_path
    temp_welcome_dialog = helpers_create_html_dialog('welcome', '欢迎使用', 'welcome.html', 800, 500, false)
    temp_welcome_dialog.show_modal
  end

  # 创建工具栏
  def self.create_toolbar
    return if defined? @toolbar

    @toolbar = UI::Toolbar.new('重庆灯海灯光工具')

    # 打开灯库
    open_light_lib_cmd = helpers_create_button('打开灯库', '只有从这里加载的灯具才能在本插件使用！', '打开灯库', 'put_lights.png', method(:put_light_open_dialog).to_proc)
    open_light_lib_cmd.set_validation_proc do
      DataManager.data['select_light']&.visible? ? MF_CHECKED : MF_UNCHECKED
    end
    @toolbar.add_item(open_light_lib_cmd)

    @toolbar.add_separator # 分隔符

    # 编辑模式
    edit_mode_cmd = helpers_create_button('激活编辑模式', '激活编辑模式，该模式仅能修改灯具。', '激活编辑模式', 'edit_mode.png', method(:edit_mode).to_proc)
    edit_mode_cmd.set_validation_proc do
      Sketchup.active_model.tools.active_tool.instance_of?(DengHaiLightTools::Tools::EditMode) ? MF_CHECKED : MF_UNCHECKED
    end
    @toolbar.add_item(edit_mode_cmd)

    # 修改属性
    edit_attr_cmd = helpers_create_button('修改灯具', '修改所选灯具属性。', '修改灯具', 'edit_attr.png', method(:edit_attr).to_proc)
    @toolbar.add_item(edit_attr_cmd)

    # 配接灯具 XX
    pei_jie_cmd = helpers_create_button('自动配接', '自动配接所选灯具。', '自动配接', 'peijie.png', method(:fixture_light).to_proc)
    pei_jie_cmd.set_validation_proc do
      Sketchup.active_model.tools.active_tool.instance_of?(DengHaiLightTools::Tools::EditMode) ? MF_ENABLED : MF_GRAYED
    end
    @toolbar.add_item(pei_jie_cmd)

    # 导出MVR
    mvr_cmd = helpers_create_button('导出MVR', '导出MVR格式文件，以便和其他灯光软件交互。', '导出MVR', 'MVR.png', method(:save_mvr_file).to_proc)
    @toolbar.add_item(mvr_cmd)

    @toolbar.add_separator # 分隔符

    # 对称工具 XX
    edit_mode_cmd = helpers_create_button('对称工具', '从选择点对称所选灯具', '对称工具', 'jingxiang.png', method(:copy_light).to_proc)
    @toolbar.add_item(edit_mode_cmd)

    @toolbar.show
  end

  # 检查更新
  UpdateChecker.update
  # 创建工具栏
  create_toolbar
end
